package com.md.base;

import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.NonNull;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

/**
 * @author 刘骄阳
 * 2022-06-12 1:27
 */
public interface BaseRepository<T extends BasePO> {
  /**
   * 新增
   *
   * @param t 请求实体
   * @return 操作结果
   */
  Integer insert(T t);

  /**
   * 批量添加
   *
   * @param list 实体列表
   */
  void insertBatch(@NonNull Collection<T> list);

  /**
   * 根据主键删除
   *
   * @param id 主键id
   * @return 操作结果
   */
  Integer delete(Serializable id);

  /**
   * 删除
   *
   * @param t 实体
   * @return 操作结果
   */
  Integer delete(T t);

  /**
   * 批量删除
   *
   * @param ids id列表
   * @return 操作结果
   */
  Integer deleteBatch(List<Serializable> ids);

  /**
   * 修改
   *
   * @param t 实体
   * @return 操作结果
   */
  Integer update(T t);

  /**
   * 分页查询
   *
   * @param t        实体
   * @param pageNum  行数
   * @param pageSize 页数
   * @return 操作结果
   */
  IPage<T> selectPage(T t, Long pageNum, Long pageSize);

  /**
   * 查询
   *
   * @param t 实体
   * @return 操作结果
   */
  T select(T t);

  /**
   * 批量查询
   *
   * @param t 实体
   * @return 操作结果
   */
  List<T> selectList(T t);

  /**
   * 查询全部
   *
   * @return 操作结果
   */
  List<T> selectAll();

  /**
   * 根据id查询
   *
   * @param id 主键ID
   * @return 操作结果
   */
  T selectById(Serializable id);

  /**
   * 根据id批量查询
   *
   * @param ids 主键ID集合
   * @return 操作结果
   */
  List<T> selectByIds(Collection<Long> ids);

  /**
   * 校验数据是否存在
   *
   * @param t 实体
   * @return 校验是否存在(true : 存在 ; false : 不存在)
   */
  boolean hasExists(T t);
}
